// 给定一个字符串表达式s，表达式中所有整数为非负整数，运算符还有+-*/没有括号，实现一个基本计算器来计算并返回它的值
// 思路，堆栈
// 操作符为乘除 进行运算后将运算结果入栈，遇到加减将对应值入栈，记录遍历的数字和操作符，在下次遇到操作符的时候，进行相应的运算
function calculate(str) {
    let num = 0
    let op = '+'
    let stack = []
    for (let i = 0; i < str.length; i++) {
        // 这里空格要注意过滤掉
        if (str[i] >= '0') {
            num = num * 10 + Number(str[i])
        }
        // 当遇到下一个操作符或者遇到结尾的时候
        if (Number.isNaN(Number(str[i])) || i === str.length - 1) {
            switch (op) {
                case '+':
                    stack.push(num)
                    break;
                case '-':
                    stack.push(-num)
                    break;
                case '*':
                    stack.push(num * stack.pop())
                    break;
                case '/':
                    stack.push(stack.pop() / num | 0)
                    break;

                default:
                    break;
            }
            op = str[i]
            num = 0
        }

    }
    let ans = stack.reduce((sum, cur) => sum + cur, 0)
    return ans
}
// console.log(calculate('1+25*5-4'));
console.log(calculate(" 3/2 "));